package com.cotasul.persistencia;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.cotasul.bean.CompradorBean;
import com.cotasul.bean.UsuarioBean;
import com.cotasul.negocio.excecoes.EmailException;
import com.cotasul.persistencia.config.GerenciadorConexao;
import com.cotasul.persistencia.config.SQLConfiguracao;
import com.cotasul.persistencia.enums.EnumCondicao;
import com.cotasul.persistencia.interfaces.ICompradorDao;
import com.cotasul.util.Ferramentas;

public class CompradorDao<P extends CompradorBean> extends DaoGenerico<P>
		implements ICompradorDao<P> {

	@Override
	public String procuraPorParam(String tabela, String campo, String valor,
			EnumCondicao condicao) {
		return null;
	}

	@Override
	public void alterar(P p) throws Exception {
		// TODO Auto-generated method stub

	}

	@Override
	public Map<String, Long> salvar(P p) throws Exception {
		long codComp = 0;
		long codUser = 0;
		try {
			conn = GerenciadorConexao.getConexao();
			query = SQLConfiguracao.getInstance().getValor(
					"localiza_max_comprador");
			ps = conn.prepareStatement(query);
			rs = ps.executeQuery();
			if (rs.next()) {
				codComp = rs.getLong("MAXCOD");
			}
			query = SQLConfiguracao.getInstance().getValor(
					"localiza_max_usuario");
			ps = conn.prepareStatement(query);
			rs = ps.executeQuery();
			if (rs.next()) {
				codUser = rs.getLong("MAXCOD");
			}
			query = SQLConfiguracao.getInstance().getValor("insere_usuario");
			ps = conn.prepareStatement(query);
			ps.setLong(1, codUser);
			ps.setString(2, p.getUsuario().getLogin());
			ps.setString(3, p.getUsuario().getSenha());
			ps.setString(4, "Comprador");
			ps.setString(5, p.getUsuario().getCidade());
			ps.setString(6, p.getUsuario().getUf());
			ps.setString(7, p.getUsuario().getEndereco());

			ps.execute();
			conn.commit();

			query = SQLConfiguracao.getInstance().getValor("insere_comprador");
			ps = conn.prepareStatement(query);
			ps.setLong(1, codComp);
			ps.setString(2, p.getNome());
			ps.setString(3, p.getFone());
			ps.setString(4, p.getFone2());
			ps.setString(5, p.getContato());
			ps.setString(6, p.getEmail());
			ps.setString(7, p.getCnpj());
			ps.setLong(8, codUser);
			ps.execute();
			conn.commit();

		} catch (Exception e) {
			conn.rollback();
			throw e;
		} finally {
			ps.close();
			rs.close();
		}
		return new HashMap<String, Long>();// .put("", codComp);
	}

	@Override
	public void exluir(P p) throws Exception {
		try {
			query = SQLConfiguracao.getInstance().getValor("excluir_comprador");
			conn = GerenciadorConexao.getConexao();
			ps = conn.prepareStatement(query);
			ps.setLong(1, p.getCodigo());
			ps.execute();
			conn.commit();
		} catch (Exception e) {
			throw e;
		} finally {
			super.fecharRecursos(ps, rs);
		}
	}

	public void aprovaComprador(P p) throws Exception {
		try {
			query = SQLConfiguracao.getInstance().getValor("aprova_usuario");
			conn = GerenciadorConexao.getConexao();
			ps = conn.prepareStatement(query);
			ps.setString(1, p.getUsuario().getCodigo() + "");
			ps.execute();
			conn.commit();
		} catch (Exception e) {
			throw e;
		} finally {
			super.fecharRecursos(ps, rs);
		}
	}

	@Override
	public CompradorBean buscaComprador(P p) throws Exception {
		// CompradorBean comprador = null;
		try {
			query = SQLConfiguracao.getInstance().getValor(
					"localiza_comprador_usuario");
			conn = GerenciadorConexao.getConexao();
			ps = conn.prepareStatement(query);
			ps.setLong(1, p.getUsuario().getCodigo());
			rs = ps.executeQuery();
			if (rs.next()) {
				// comprador = new CompradorBean();
				p.setCodigo(rs.getLong("IDCOMP"));
				p.setCnpj(rs.getString("CNPJ"));
				p.setContato(rs.getString("CONTATO"));
				p.setEmail(rs.getString("EMAIL"));
				p.setFone(rs.getString("FONE"));
				p.setFone2(rs.getString("FONE2"));
				p.setNome(rs.getString("RAZAO"));
				// comprador.setUsuario(usuario);
			}

		} catch (Exception e) {
			throw e;
		}
		return p;
	}

	public void enviaEmailComprador(String msg, String titulo, Long codItemOrca)
			throws EmailException {

		try {
			conn = GerenciadorConexao.getConexao();
			query = SQLConfiguracao.getInstance().getValor(
					"localiza_email_comp_cota");
			ps = conn.prepareStatement(query);
			ps.setLong(1, codItemOrca);
			rs = ps.executeQuery();
			if (rs.next()) {
				String destino = rs.getString("EMAIL");
				Ferramentas.enviaEmail(msg, titulo, destino);
			}
		} catch (Exception e) {
			throw new EmailException();
		}
	}

	@Override
	public void preSalvar(P p) {

	}

	@SuppressWarnings("unchecked")
	@Override
	public List<P> filtraCompradores(P p) throws Exception {
		List<P> listaCompradores = new ArrayList<P>();
		CompradorBean comprador;
		UsuarioBean usuario;
		try {
			query = SQLConfiguracao.getInstance()
					.getValor("filtra_compradores");
			if (p != null) {
				if (p.getUsuario() != null && p.getUsuario().getAtivo() != null
						&& !"".equals(p.getUsuario().getAtivo().trim())) {
					query += " AND U.ATIVO = '"
							+ p.getUsuario().getAtivo().trim() + "'";
				}
				if (p.getNome() != null && !"".equals(p.getNome().trim())) {
					query += " AND C.RAZAO LIKE '" + p.getNome().trim() + "%%'";
				}
				if (p.getContato() != null && !"".equals(p.getContato().trim())) {
					query += " AND C.CONTATO LIKE '" + p.getContato().trim()
							+ "%%'";
				}
				if (p.getCnpj() != null && !"".equals(p.getCnpj().trim())) {
					query += " AND C.CNPJ LIKE '" + p.getCnpj().trim() + "%%'";
				}
				if (p.getCodigo() != null && p.getCodigo() != 0) {
					query += " AND C.IDCOMP = " + p.getCodigo();
				}

			}
			conn = GerenciadorConexao.getConexao();
			ps = conn.prepareStatement(query);
			rs = ps.executeQuery();
			while (rs.next()) {
				comprador = new CompradorBean();
				comprador.setCnpj(rs.getString("CNPJ"));
				comprador.setCodigo(rs.getLong("IDCOMP"));
				comprador.setContato(rs.getString("CONTATO"));
				comprador.setEmail(rs.getString("EMAIL"));
				comprador.setFone(rs.getString("FONE"));
				comprador.setFone2(rs.getString("FONE2"));
				comprador.setNome(rs.getString("RAZAO"));
				usuario = new UsuarioBean();
				usuario.setAtivo(rs.getString("ATIVO"));
				usuario.setCodigo(rs.getLong("IDUSER"));
				usuario.setLogin(rs.getString("LOGIN"));
				usuario.setSenha(rs.getString("SENHA"));
				usuario.setTipo(rs.getString("TIPO"));
				usuario.setBloqueado(rs.getString("BLOQUEADO"));
				comprador.setUsuario(usuario);
				listaCompradores.add((P) comprador);
			}
		} catch (Exception e) {
			throw e;
		} finally {
			super.fecharRecursos(ps, rs);
		}
		return listaCompradores;
	}

	public List<CompradorBean> buscaComprador(Map<String, String> param)
			throws Exception {
		CompradorBean comprador = null;
		List<CompradorBean> compradores = new ArrayList<CompradorBean>();
		try {
			query = SQLConfiguracao.getInstance().getValor(
					"localiza_comprador_nome");
			conn = GerenciadorConexao.getConexao();
			ps = conn.prepareStatement(query);
			ps.setString(1, param.get("NOME") + "%");
			rs = ps.executeQuery();
			while (rs.next()) {
				comprador = new CompradorBean();
				comprador.setCodigo(rs.getLong("IDCOMP"));
				comprador.setNome(rs.getString("RAZAO"));
				compradores.add(comprador);
			}

		} catch (Exception e) {
			throw e;
		}
		return compradores;
	}

}
